選擇排序屬於初等排序的其中一種,假設 input 資料共 N 筆存放於 Array[0, 1, ....., (n-1)] 中,則從 index 0 做到 index (n - 2),共 n - 1 回合,每回合找出 Array[index ~ (n - 1)] 中之最小值,並與 Array[index] 做交換。
給予:6, 5, 7, 3, 4,(N = 5) 進行 selection sort:
void swap(int arr[], int i, int min){
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
void selectionSort(int arr[], int n){
for(int i = 0; i < n - 1; i++){
int minIndex = i;
for(int j = i + 1; j < n; j++){
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
if(minIndex != i){
swap(arr, i, minIndex);
}
}
}
Best case: O(n^2)
Worst case: O(n^2)
Average case: O(n^2)
從程式碼來看:無論 input data 是怎樣排列,都須經過 0 ~ (N - 2) 共 (N - 1) 回合的 i 迴圈,每回合 (N - i - 1) 次的 j 迴圈。第一回合做 N - 1 次 j 迴圈,第二回合做 N - 2 次 j 迴圈,到第 (N - 1) 回合做 1 次 j 迴圈。總共:1 + 2 + 3 + ...... + (N - 1) = N(N - 1) / 2 次 = O(N^2)。
假設 input data 為:5(1), 5(2), 2
則排序後:因為 2 為 最小值,5(1) 與 2 對調:2, 5(2), 5(1)
5(1) 出現在 5(2) 之後,因此是 unstable sorting method